package com.gxc.array;

/**
 * 给定一个数组arr，
 * 如果通过调整可以做到arr中任意两个相邻的数字相乘是4的倍数，返回true;
 * 如果不能返回false
 *
 * 解法：
 * 整数分奇数和偶数，
 * 奇数必须和4组合   343
 * 偶数分2和 大于等于4的偶数，2要么自己和2组合（）22，要么和4组合（24）
 * 343422
 *
 * 所以统计数组中奇数的个数 q，2的个数 w，和4的个数e
 * 如果没有2,e>=q-1,且e>=1(针对只要一个奇数 ---34)  ----34343  34
 * 如果没有奇数，除了2 不行，其他任意偶数都行
 * 既有奇数又有2,e>=q    -----343434*********
 */
public class MultipleOf4 {

    public static boolean isMatch(int[] arr) {
        if (arr.length<2) return false;
        //计算数组中 奇数的个数 q，2的个数 w，和4的个数e
        int q = 0;
        int w = 0;
        int e = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i]%2 == 1) {
                q++;
            } else if (arr[i] == 2){
                w++;
            } else {
                e++;
            }
        }

        //如果没有2,e>=q-1,且e>=1(针对只要一个奇数 ---34)  ----34343  34
        if (w == 0) {
            if (e>=q-1 && e>=1) {
                return true;
            }
            //如果没有奇数，除了2 不行，其他任意偶数都行
            //既有奇数又有2,e>=q    -----343434*********
        } else if (q == 0){
            return true;
        } else {
            if (e>=q) return true;
        }
        return false;
    }
}
